const url = require('url');
const del = require('del');
const fs = require('fs-extra');
const _ = require('lodash');
const g = require('gulp');
const $ = require('gulp-load-plugins')();
const u = require('./gulp.util');
const cfg = require('./config');

/////////////////////////////////////////////////////////////////////
// 文件复制

g.task('copy.bin', () => u.copyNew(
    u.dir(cfg.src.bin.dir),
    cfg.run.dir,
    {base: cfg.src.bin.dir}
));

g.task('copy.etc', () => u.copyNew(
    u.dir(cfg.src.etc.dir),
    cfg.run.dir,
    {base: cfg.src.dir}
));

g.task('copy.res', () => u.copyNew(
    u.dir(cfg.src.res.dir),
    cfg.run.web.dir,
    {base: cfg.src.res.dir}
));

g.task('copy', ['copy.bin', 'copy.etc', 'copy.res']);

const babel_option = {
    presets: ['es2015']
};

g.task('build', ['check.app', 'check.etc'], () =>
    u.src(u.dir([cfg.src.app.dir], '.js'), {base: cfg.src.dir})
        .pipe($.babel(babel_option))
        .pipe(g.dest(cfg.run.dir))
);

g.task('clean', () => del(cfg.run.dir));

const cache = new $.cacheModified();

g.task('build.debug', ['check.app', 'check.etc'], () =>
    u.src(u.dir([cfg.src.app.dir], '.js'), {base: cfg.src.dir})
        .pipe(cache.updateSource())
        .pipe($.sourcemaps.init())
        .pipe($.babel(babel_option))
        .pipe(cache.updateProcessed())
        .pipe($.sourcemaps.write('.'))
        .pipe(g.dest(cfg.run.dir))
);

/////////////////////////////////////////////////////////////////////
// 调试运行

g.task('debug', ['build.debug'], () => $.nodemon({
    env: {NODE_ENV: 'development'},
    watch: [cfg.src.app.dir],
    tasks: 'build.debug',
    script: `${cfg.run.dir}/${cfg.main}`,
    nodeArgs: [`--debug=${cfg.debug || 5858}`],
    args: cfg.args
}));

g.task('watch', () => {
    g.watch(u.dir(cfg.src.etc.dir), ['copy.etc']);
    g.watch(u.dir(cfg.src.res.dir), ['copy.res']);
});
